package main.java.maziacs;

import main.java.maziacs.characters.Hero;

public interface IGame {

	public abstract Hero getHero1();

	public abstract Hero getHero2();

	public abstract void setNumberOfGems(Integer numberOfGems);

	public abstract Integer getNumberOfGems();

	/** 
	 * Getter of the property <tt>numberOfPlayers</tt>
	 * @return  Returns the numberOfPlayers.
	 * @uml.property  name="numberOfPlayers"
	 */
	public abstract int getNumberOfPlayers();

	/** 
	 * Setter of the property <tt>numberOfPlayers</tt>
	 * @param numberOfPlayers  The numberOfPlayers to set.
	 * @uml.property  name="numberOfPlayers"
	 */
	public abstract void setNumberOfPlayers(int numberOfPlayers);

	/**
	 * Getter of the property <tt>board</tt>
	 * @return  Returns the board.
	 * @uml.property  name="board"
	 */
	public abstract IBoard getBoard();

	/**
	 * Setter of the property <tt>board</tt>
	 * @param board  The board to set.
	 * @uml.property  name="board"
	 */
	public abstract void setBoard(IBoard board);

	/**
	 * Getter of the property <tt>level</tt>
	 * @return  Returns the level.
	 * @uml.property  name="level"
	 */
	public abstract Level getLevel();

	/**
	 * Setter of the property <tt>level</tt>
	 * @param level  The level to set.
	 * @uml.property  name="level"
	 */
	public abstract void setLevel(Level level);

	/**
	 * Getter of the property <tt>difficultyLevel</tt>
	 * @return  Returns the difficultyLevel.
	 * @uml.property  name="difficultyLevel"
	 */
	public abstract Level getDifficultyLevel();

	/**
	 * Setter of the property <tt>difficultyLevel</tt>
	 * @param difficultyLevel  The difficultyLevel to set.
	 * @uml.property  name="difficultyLevel"
	 */
	public abstract void setDifficultyLevel(Level difficultyLevel);

	/** 
	 * Setter of the property <tt>finishGame</tt>
	 * @param finishGame  The finishGame to set.
	 * @uml.property  name="finishGame"
	 */
	public abstract boolean getFinishGame();

	public abstract void setFinishGame(boolean finishGame);

	/** 
	 * Getter of the property <tt>finishGame</tt>
	 * @return  Returns the finishGame.
	 * @uml.property  name="finishGame"
	 */
	//Este metodo debera calcular si ha terminado el juego:
	public abstract boolean isFinishGame();

	/**
	 * Setter of the property <tt>heroWins</tt>
	 * @param heroWins  The heroWins to set.
	 * @uml.property  name="heroWins"
	 */
	public abstract boolean getHeroWins();

	public abstract void setHeroWins(boolean heroWins);

	/**
	 * Getter of the property <tt>heroWins</tt>
	 * @return  Returns the heroWins.
	 * @uml.property  name="heroWins"
	 */
	public abstract boolean isHeroWins();

	//TODO
	public abstract void play();

	//TODO
	public abstract void initializeGame();

	/**
	 * Getter of the property <tt>hero</tt>
	 * @return  Returns the hero.
	 * @uml.property  name="hero"
	 */
	//public Collection getHero() {
	//return hero;
	//}
	public abstract IUI getIntUsu();

	/**
	 * Setter of the property <tt>hero</tt>
	 * @param hero  The hero to set.
	 * @uml.property  name="hero"
	 */
	//public void setHero(Collection hero) {
	//this.hero = hero;
	//}

}